import Vue from "vue"
import VueRouter from "vue-router"
import routes from './routes'


// 注册插件
Vue.use(VueRouter)

// // 重写push和replace方法
// // 先保留原始的push方法和replace方法
const originPush = VueRouter.prototype.push;
const originReplace = VueRouter.prototype.replace;

// 在重写其方法
VueRouter.prototype.push = function (num, okCallBack, errCallBack) {
  // 当没有指定成功或者失败的回调函数时,会放回一个promise对象内部判断是否成功或者失败
  if (okCallBack == undefined && errCallBack == undefined) {
    // 通过链式调用catch方法来处理错误
    originPush.call(this, num).catch(() => { });
  } else {
    // 当指定了成功或者失败的回调函数,那么就观察他是执行成功回调还是失败回调
    originPush.call(this, num, okCallBack, errCallBack)
  }
}


// 重写replace方法
VueRouter.prototype.replace = function (num, okCallBack, errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    originReplace.call(this, num).catch(() => { })
  } else {
    originReplace.call(this, num, okCallBack, errCallBack)
  }
}



// 创建路由对象实例
const router = new VueRouter({
  mode: 'history',
  routes,
  scrollBehavior(to, from, savedPosition) {
    // console.log(to,from,savedPosition)
    // to 要跳转到哪个页面
    // from : 从哪个页面跳转过来
    // savedPosition: 保存之前页面的位置 
    if (savedPosition) {
      return savedPosition
    } else {
      return { x: 0, y: 0 }
    }
  }
})

// 向外暴露实例对象
export default router